import pysrv

BYTE = 'byte'
SHORT = 'short'
INT = 'int'
STRING = 'str'

class PyMsg:
	def stream(self):
		msg = pysrv.Msg()
		for msgfield in self.my_msg:
			value = getattr(self,msgfield[1])
			if (msgfield[0] == 'short'):
				msg.pushInt(2,value)
			elif (msgfield[0] == 'int'):
				msg.pushInt(4,value)
			elif (msgfield[0] == 'byte'):
				msg.pushInt(1,value)
			elif (msgfield[0] == 'str'):
				msg.pushStr(msgfield[2],value)
			else:
				print("not define type")
		return msg.content()
		
	def parse(self,content):
		msg = pysrv.Msg()
		msg.set(content)
		for msgfield in self.my_msg:
			if (msgfield[0] == 'short'):
				value = msg.popInt(2)
				setattr(self,msgfield[1],value)
			elif (msgfield[0] == 'int'):
				value = msg.popInt(4)
				setattr(self,msgfield[1],value)
			elif (msgfield[0] == 'byte'):
				value = msg.popInt(1)
				setattr(self,msgfield[1],value)
			elif (msgfield[0] == 'str'):
				value = msg.popStr(msgfield[2])
				setattr(self,msgfield[1],value)
			else:
				print("not define type")
	def trace(self):
		for msgfield in self.my_msg:
			value = getattr(self,msgfield[1])
			print(msgfield[1],value)
		print("==================")	
def getmsg(msg):
	p = PyMsg()
	p.my_msg = msg 
	for msgfield in msg:
		if (msgfield[0] == 'short'):
			setattr(p,msgfield[1],msgfield[2])
		elif (msgfield[0] == 'int'):
			setattr(p,msgfield[1],msgfield[2])
		elif (msgfield[0] == 'byte'):
			setattr(p,msgfield[1],msgfield[2])
		elif (msgfield[0] == 'str'):
			setattr(p,msgfield[1],msgfield[3])
		else:
			print("not define type")
	return p
	
def headmsg(cmd,para):
	return [('byte','cmd',cmd),('byte','para',para)]
'''	
#define message
LoginInGame = headmsg(1,2) + [
	('short','id',0),  
	('int','msg',1),
	('str','content',32,"hello,world")
]

#getmsg from messageformat
p = getmsg(LoginInGame)

p.msg = 100
p.content="i am jijinlong"
# message to stream
str = p.stream()

print(str)

# message from stream
p.parse(str)

p.trace()
'''